{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d2e973e9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import os\n",
    "import re\n",
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11265b54",
   "metadata": {},
   "source": [
    "### 1.查看数据信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "dde4aecb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2581 entries, 0 to 2580\n",
      "Data columns (total 7 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   date    2581 non-null   object \n",
      " 1   code    2581 non-null   object \n",
      " 2   open    2581 non-null   float64\n",
      " 3   high    2581 non-null   float64\n",
      " 4   low     2581 non-null   float64\n",
      " 5   close   2581 non-null   float64\n",
      " 6   volume  2581 non-null   float64\n",
      "dtypes: float64(5), object(2)\n",
      "memory usage: 141.3+ KB\n"
     ]
    }
   ],
   "source": [
    "d=pd.read_csv(r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\AT的A股日线\\szse.002390.csv')\n",
    "d.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d84ea51c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2676 entries, 0 to 2675\n",
      "Data columns (total 12 columns):\n",
      " #   Column          Non-Null Count  Dtype  \n",
      "---  ------          --------------  -----  \n",
      " 0   order_book_id   2676 non-null   object \n",
      " 1   date            2676 non-null   object \n",
      " 2   high            2676 non-null   float64\n",
      " 3   total_turnover  2676 non-null   float64\n",
      " 4   low             2676 non-null   float64\n",
      " 5   open            2676 non-null   float64\n",
      " 6   volume          2676 non-null   float64\n",
      " 7   prev_close      2676 non-null   float64\n",
      " 8   limit_down      2676 non-null   float64\n",
      " 9   limit_up        2676 non-null   float64\n",
      " 10  num_trades      2676 non-null   float64\n",
      " 11  close           2676 non-null   float64\n",
      "dtypes: float64(10), object(2)\n",
      "memory usage: 251.0+ KB\n"
     ]
    }
   ],
   "source": [
    "a=pd.read_csv(r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\米筐的A股日线\\002390.XSHE.csv')\n",
    "a.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45f0ebe7",
   "metadata": {},
   "source": [
    "### 2.统一数据格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c29603ad",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "所有文件处理完成\n"
     ]
    }
   ],
   "source": [
    "\n",
    "def process_stock_data(folder_path):\n",
    "    \"\"\"\n",
    "    处理股票数据文件夹中的所有CSV文件：\n",
    "    1. 数值列保留4位小数\n",
    "    2. 转换时间列为标准日期格式(YYYY-MM-DD)\n",
    "    3. 重命名time列为date\n",
    "    4. 覆盖原始文件\n",
    "    \n",
    "    \"\"\"\n",
    "    # 验证文件夹是否存在\n",
    "    if not os.path.exists(folder_path):\n",
    "        raise FileNotFoundError(f\"文件夹不存在: {folder_path}\")\n",
    "    \n",
    "    # 遍历文件夹中的所有CSV文件\n",
    "    processed_count = 0\n",
    "    for filename in os.listdir(folder_path):\n",
    "        if not filename.endswith('.csv'):\n",
    "            continue\n",
    "            \n",
    "        file_path = os.path.join(folder_path, filename)\n",
    "        \n",
    "        try:\n",
    "            # 读取CSV文件\n",
    "            df = pd.read_csv(file_path)\n",
    "            \n",
    "            # 1. 数值列保留4位小数\n",
    "            numeric_cols = ['open', 'high', 'low', 'close']\n",
    "            # 只处理存在的列\n",
    "            existing_numeric_cols = [col for col in numeric_cols if col in df.columns]\n",
    "            if existing_numeric_cols:\n",
    "                df[existing_numeric_cols] = df[existing_numeric_cols].round(4)\n",
    "            \n",
    "            # 2. 处理时间列：转换为标准日期格式 YYYY-MM-DD\n",
    "            if 'time' in df.columns:\n",
    "                # 先提取日期部分（移除时间部分）\n",
    "                df['time'] = df['time'].apply(lambda x: x.split()[0] if isinstance(x, str) and ' ' in x else x)\n",
    "                \n",
    "                # 转换为标准日期格式\n",
    "                df['time'] = pd.to_datetime(\n",
    "                    df['time'], \n",
    "                    errors='coerce',  # 转换失败时设为NaT\n",
    "                    infer_datetime_format=True  # 自动推断格式更安全\n",
    "                ).dt.strftime('%Y-%m-%d')  # 格式化为\"年-月-日\"\n",
    "                \n",
    "                # 3. 重命名time列为date\n",
    "                df = df.rename(columns={'time': 'date'})\n",
    "            \n",
    "            # 4. 覆盖原始文件\n",
    "            df.to_csv(file_path, index=False)\n",
    "            processed_count += 1\n",
    "            \n",
    "        except Exception as e:\n",
    "            print(f\"处理文件 {filename} 时出错: {str(e)}\")\n",
    "    \n",
    "    print(f\"所有文件处理完成\")\n",
    "\n",
    "# 使用示例\n",
    "if __name__ == \"__main__\":\n",
    "    folder_path = r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\AT的A股日线'\n",
    "    process_stock_data(folder_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00440327",
   "metadata": {},
   "source": [
    "### 3.匹配对应文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "95464412",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "匹配成功: 5099 对文件\n",
      "AT未匹配: 0 个文件\n",
      "米筐未匹配: 230 个文件\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "def match_stock_files(at_folder, miq_folder, output_unmatched=True):\n",
    "    \"\"\"\n",
    "    匹配两个文件夹中的股票文件（通过股票代码数字部分）\n",
    "    \n",
    "    参数:\n",
    "    at_folder (str): AT数据文件夹路径\n",
    "    miq_folder (str): 米筐数据文件夹路径\n",
    "    output_unmatched (bool): 是否输出未匹配文件\n",
    "    \n",
    "    返回:\n",
    "    tuple: (匹配字典, 未匹配AT文件, 未匹配米筐文件)\n",
    "    \"\"\"\n",
    "    # 构建匹配字典 {股票代码: (at文件名, miq文件名)}\n",
    "    mapping = {}\n",
    "    unmatched_at = []\n",
    "    unmatched_miq = []\n",
    "    \n",
    "    # 扫描AT文件夹\n",
    "    at_files = {}\n",
    "    for filename in os.listdir(at_folder):\n",
    "        match = re.match(r'^(sse|szse)\\.(\\d+)\\.csv$', filename)\n",
    "        if match:\n",
    "            stock_code = match.group(2)\n",
    "            at_files[stock_code] = filename\n",
    "    \n",
    "    # 扫描米筐文件夹\n",
    "    miq_files = {}\n",
    "    for filename in os.listdir(miq_folder):\n",
    "        match = re.match(r'^(\\d+)\\.(XSHG|XSHE)\\.csv$', filename)\n",
    "        if match:\n",
    "            stock_code = match.group(1)\n",
    "            miq_files[stock_code] = filename\n",
    "    \n",
    "    # 创建匹配关系\n",
    "    all_codes = set(at_files.keys()) | set(miq_files.keys())\n",
    "    for code in all_codes:\n",
    "        at_file = at_files.get(code)\n",
    "        miq_file = miq_files.get(code)\n",
    "        \n",
    "        if at_file and miq_file:\n",
    "            mapping[at_file] = miq_file\n",
    "        else:\n",
    "            if at_file and not miq_file:\n",
    "                unmatched_at.append(at_file)\n",
    "            if miq_file and not at_file:\n",
    "                unmatched_miq.append(miq_file)\n",
    "    \n",
    "    # 输出未匹配文件\n",
    "    if output_unmatched:\n",
    "        with open('unmatched_at.txt', 'w') as f:\n",
    "            f.write(\"\\n\".join(unmatched_at))\n",
    "        with open('unmatched_miq.txt', 'w') as f:\n",
    "            f.write(\"\\n\".join(unmatched_miq))\n",
    "    \n",
    "    print(f\"匹配成功: {len(mapping)} 对文件\")\n",
    "    print(f\"AT未匹配: {len(unmatched_at)} 个文件\")\n",
    "    print(f\"米筐未匹配: {len(unmatched_miq)} 个文件\")\n",
    "    \n",
    "    return mapping, unmatched_at, unmatched_miq\n",
    "\n",
    "# 使用示例\n",
    "if __name__ == \"__main__\":\n",
    "    at_folder =  r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\AT的A股日线'\n",
    "    miq_folder = r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\米筐的A股日线' \n",
    "    mapping, _, _ = match_stock_files(at_folder, miq_folder)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00361bcb",
   "metadata": {},
   "source": [
    "### 4.记录差异数据信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4c28e036",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "匹配成功: 5099 对文件\n",
      "AT未匹配: 0 个文件\n",
      "米筐未匹配: 230 个文件\n",
      "更新: sse.603708.csv → 603708.XSHG.csv | 差异行: 1924\n",
      "更新: szse.002324.csv → 002324.XSHE.csv | 差异行: 2541\n",
      "更新: sse.600248.csv → 600248.XSHG.csv | 差异行: 2492\n",
      "更新: sse.600026.csv → 600026.XSHG.csv | 差异行: 2565\n",
      "更新: sse.605179.csv → 605179.XSHG.csv | 差异行: 932\n",
      "更新: szse.002212.csv → 002212.XSHE.csv | 差异行: 2381\n",
      "更新: sse.600236.csv → 600236.XSHG.csv | 差异行: 2580\n",
      "更新: sse.603685.csv → 603685.XSHG.csv | 差异行: 1658\n",
      "更新: sse.603697.csv → 603697.XSHG.csv | 差异行: 1371\n",
      "更新: sse.603001.csv → 603001.XSHG.csv | 差异行: 2589\n",
      "更新: szse.301446.csv → 301446.XSHE.csv | 差异行: 287\n",
      "更新: szse.002390.csv → 002390.XSHE.csv | 差异行: 2535\n",
      "更新: szse.002226.csv → 002226.XSHE.csv | 差异行: 2302\n",
      "更新: sse.601919.csv → 601919.XSHG.csv | 差异行: 2470\n",
      "更新: szse.000651.csv → 000651.XSHE.csv | 差异行: 2436\n",
      "更新: sse.603167.csv → 603167.XSHG.csv | 差异行: 2614\n",
      "更新: szse.000756.csv → 000756.XSHE.csv | 差异行: 2551\n",
      "更新: szse.300660.csv → 300660.XSHE.csv | 差异行: 1777\n",
      "更新: szse.003028.csv → 003028.XSHE.csv | 差异行: 906\n",
      "更新: sse.600282.csv → 600282.XSHG.csv | 差异行: 2558\n",
      "更新: szse.002825.csv → 002825.XSHE.csv | 差异行: 1890\n",
      "更新: szse.301393.csv → 301393.XSHE.csv | 差异行: 322\n",
      "更新: sse.601968.csv → 601968.XSHG.csv | 差异行: 2241\n",
      "更新: szse.000166.csv → 000166.XSHE.csv | 差异行: 2376\n",
      "更新: szse.300908.csv → 300908.XSHE.csv | 差异行: 995\n",
      "更新: szse.300770.csv → 300770.XSHE.csv | 差异行: 1359\n",
      "更新: sse.603017.csv → 603017.XSHG.csv | 差异行: 2356\n",
      "更新: sse.688556.csv → 688556.XSHG.csv | 差异行: 1010\n",
      "更新: sse.688530.csv → 688530.XSHG.csv | 差异行: 106\n",
      "更新: szse.000700.csv → 000700.XSHE.csv | 差异行: 2531\n",
      "更新: sse.600188.csv → 600188.XSHG.csv | 差异行: 2637\n",
      "更新: szse.300360.csv → 300360.XSHE.csv | 差异行: 2566\n",
      "更新: szse.300773.csv → 300773.XSHE.csv | 差异行: 1305\n",
      "更新: sse.688307.csv → 688307.XSHG.csv | 差异行: 383\n",
      "更新: sse.605286.csv → 605286.XSHG.csv | 差异行: 847\n",
      "更新: szse.300907.csv → 300907.XSHE.csv | 差异行: 933\n",
      "更新: szse.301069.csv → 301069.XSHE.csv | 差异行: 762\n",
      "更新: sse.600400.csv → 600400.XSHG.csv | 差异行: 2511\n",
      "更新: sse.601096.csv → 601096.XSHG.csv | 差异行: 197\n",
      "更新: szse.002673.csv → 002673.XSHE.csv | 差异行: 2608\n",
      "更新: szse.301589.csv → 301589.XSHE.csv | 差异行: 209\n",
      "更新: szse.301392.csv → 301392.XSHE.csv | 差异行: 78\n",
      "更新: sse.601156.csv → 601156.XSHG.csv | 差异行: 818\n",
      "更新: sse.603600.csv → 603600.XSHG.csv | 差异行: 2331\n",
      "更新: sse.688087.csv → 688087.XSHG.csv | 差异行: 800\n",
      "更新: szse.301611.csv → 301611.XSHE.csv | 差异行: 72\n",
      "更新: szse.301036.csv → 301036.XSHE.csv | 差异行: 778\n",
      "更新: szse.301031.csv → 301031.XSHE.csv | 差异行: 778\n",
      "更新: sse.688273.csv → 688273.XSHG.csv | 差异行: 519\n",
      "更新: szse.301077.csv → 301077.XSHE.csv | 差异行: 734\n",
      "更新: sse.603383.csv → 603383.XSHG.csv | 差异行: 1815\n",
      "更新: szse.301181.csv → 301181.XSHE.csv | 差异行: 619\n",
      "更新: sse.603983.csv → 603983.XSHG.csv | 差异行: 1288\n",
      "更新: sse.603699.csv → 603699.XSHG.csv | 差异行: 2605\n",
      "更新: sse.688608.csv → 688608.XSHG.csv | 差异行: 967\n",
      "更新: sse.688692.csv → 688692.XSHG.csv | 差异行: 87\n",
      "更新: szse.301325.csv → 301325.XSHE.csv | 差异行: 336\n",
      "更新: sse.603630.csv → 603630.XSHG.csv | 差异行: 1846\n",
      "更新: sse.603607.csv → 603607.XSHG.csv | 差异行: 1698\n",
      "更新: sse.600859.csv → 600859.XSHG.csv | 差异行: 1\n",
      "更新: szse.002951.csv → 002951.XSHE.csv | 差异行: 1360\n",
      "更新: sse.603117.csv → 603117.XSHG.csv | 差异行: 1\n",
      "更新: sse.600426.csv → 600426.XSHG.csv | 差异行: 2636\n",
      "更新: szse.002532.csv → 002532.XSHE.csv | 差异行: 2535\n",
      "更新: sse.601811.csv → 601811.XSHG.csv | 差异行: 1999\n",
      "更新: szse.301151.csv → 301151.XSHE.csv | 差异行: 640\n",
      "更新: szse.000731.csv → 000731.XSHE.csv | 差异行: 2622\n",
      "更新: sse.601991.csv → 601991.XSHG.csv | 差异行: 2575\n",
      "更新: szse.001323.csv → 001323.XSHE.csv | 差异行: 552\n",
      "更新: sse.603277.csv → 603277.XSHG.csv | 差异行: 1725\n",
      "更新: sse.605389.csv → 605389.XSHG.csv | 差异行: 838\n",
      "更新: sse.603121.csv → 603121.XSHG.csv | 差异行: 1404\n",
      "更新: szse.002582.csv → 002582.XSHE.csv | 差异行: 2465\n",
      "更新: sse.688681.csv → 688681.XSHG.csv | 差异行: 849\n",
      "更新: szse.301257.csv → 301257.XSHE.csv | 差异行: 582\n",
      "更新: sse.600547.csv → 600547.XSHG.csv | 差异行: 2538\n",
      "更新: sse.688028.csv → 688028.XSHG.csv | 差异行: 1252\n",
      "更新: szse.000963.csv → 000963.XSHE.csv | 差异行: 2566\n",
      "更新: sse.600783.csv → 600783.XSHG.csv | 差异行: 1\n",
      "更新: sse.603517.csv → 603517.XSHG.csv | 差异行: 1840\n",
      "更新: sse.600163.csv → 600163.XSHG.csv | 差异行: 2511\n",
      "更新: sse.601966.csv → 601966.XSHG.csv | 差异行: 2039\n",
      "更新: sse.600834.csv → 600834.XSHG.csv | 差异行: 2539\n",
      "更新: sse.600693.csv → 600693.XSHG.csv | 差异行: 2602\n",
      "更新: sse.688163.csv → 688163.XSHG.csv | 差异行: 611\n",
      "更新: sse.688186.csv → 688186.XSHG.csv | 差异行: 1156\n",
      "更新: szse.301028.csv → 301028.XSHE.csv | 差异行: 798\n",
      "更新: sse.603291.csv → 603291.XSHG.csv | 差异行: 360\n",
      "更新: sse.688357.csv → 688357.XSHG.csv | 差异行: 1224\n",
      "更新: szse.001282.csv → 001282.XSHE.csv | 差异行: 389\n",
      "更新: szse.002508.csv → 002508.XSHE.csv | 差异行: 2594\n",
      "更新: sse.601728.csv → 601728.XSHG.csv | 差异行: 742\n",
      "更新: szse.000905.csv → 000905.XSHE.csv | 差异行: 2585\n",
      "更新: szse.301023.csv → 301023.XSHE.csv | 差异行: 821\n",
      "更新: szse.002328.csv → 002328.XSHE.csv | 差异行: 2586\n",
      "更新: sse.601163.csv → 601163.XSHG.csv | 差异行: 1930\n",
      "更新: sse.600819.csv → 600819.XSHG.csv | 差异行: 2535\n",
      "更新: szse.300831.csv → 300831.XSHE.csv | 差异行: 1107\n",
      "更新: szse.300919.csv → 300919.XSHE.csv | 差异行: 920\n",
      "更新: sse.600995.csv → 600995.XSHG.csv | 差异行: 2571\n",
      "更新: sse.600379.csv → 600379.XSHG.csv | 差异行: 2384\n",
      "更新: szse.000534.csv → 000534.XSHE.csv | 差异行: 2206\n",
      "更新: szse.301110.csv → 301110.XSHE.csv | 差异行: 621\n",
      "更新: sse.601133.csv → 601133.XSHG.csv | 差异行: 363\n",
      "更新: sse.600501.csv → 600501.XSHG.csv | 差异行: 1\n",
      "更新: sse.601229.csv → 601229.XSHG.csv | 差异行: 1952\n",
      "更新: sse.600278.csv → 600278.XSHG.csv | 差异行: 2635\n",
      "更新: sse.600811.csv → 600811.XSHG.csv | 差异行: 1\n",
      "更新: szse.300720.csv → 300720.XSHE.csv | 差异行: 1667\n",
      "更新: sse.600415.csv → 600415.XSHG.csv | 差异行: 1\n",
      "更新: sse.601818.csv → 601818.XSHG.csv | 差异行: 1\n",
      "更新: sse.601688.csv → 601688.XSHG.csv | 差异行: 2621\n",
      "更新: sse.600696.csv → 600696.XSHG.csv | 差异行: 1\n",
      "更新: szse.301230.csv → 301230.XSHE.csv | 差异行: 479\n",
      "更新: sse.605016.csv → 605016.XSHG.csv | 差异行: 895\n",
      "更新: sse.688312.csv → 688312.XSHG.csv | 差异行: 1\n",
      "更新: szse.300964.csv → 300964.XSHE.csv | 差异行: 770\n",
      "更新: sse.601108.csv → 601108.XSHG.csv | 差异行: 1736\n",
      "更新: szse.000338.csv → 000338.XSHE.csv | 差异行: 2620\n",
      "更新: szse.002517.csv → 002517.XSHE.csv | 差异行: 2326\n",
      "更新: szse.002353.csv → 002353.XSHE.csv | 差异行: 2519\n",
      "更新: sse.600332.csv → 600332.XSHG.csv | 差异行: 2550\n",
      "更新: szse.001203.csv → 001203.XSHE.csv | 差异行: 842\n",
      "更新: sse.600675.csv → 600675.XSHG.csv | 差异行: 1\n",
      "更新: szse.300170.csv → 300170.XSHE.csv | 差异行: 2539\n",
      "更新: szse.002802.csv → 002802.XSHE.csv | 差异行: 2029\n",
      "更新: sse.603601.csv → 603601.XSHG.csv | 差异行: 2348\n",
      "更新: sse.688505.csv → 688505.XSHG.csv | 差异行: 1020\n",
      "更新: szse.002469.csv → 002469.XSHE.csv | 差异行: 2511\n",
      "更新: szse.002661.csv → 002661.XSHE.csv | 差异行: 2545\n",
      "更新: sse.600359.csv → 600359.XSHG.csv | 差异行: 1\n",
      "更新: sse.688131.csv → 688131.XSHG.csv | 差异行: 809\n",
      "更新: szse.002993.csv → 002993.XSHE.csv | 差异行: 1038\n",
      "更新: sse.605100.csv → 605100.XSHG.csv | 差异行: 1008\n",
      "更新: sse.600715.csv → 600715.XSHG.csv | 差异行: 2454\n",
      "更新: szse.000062.csv → 000062.XSHE.csv | 差异行: 2540\n",
      "更新: sse.603501.csv → 603501.XSHG.csv | 差异行: 1683\n",
      "更新: sse.605033.csv → 605033.XSHG.csv | 差异行: 787\n",
      "更新: szse.000546.csv → 000546.XSHE.csv | 差异行: 11\n",
      "更新: sse.603087.csv → 603087.XSHG.csv | 差异行: 1075\n",
      "更新: sse.688569.csv → 688569.XSHG.csv | 差异行: 1\n",
      "更新: sse.605009.csv → 605009.XSHG.csv | 差异行: 993\n",
      "更新: sse.601288.csv → 601288.XSHG.csv | 差异行: 2676\n",
      "更新: szse.002756.csv → 002756.XSHE.csv | 差异行: 2150\n",
      "更新: szse.300227.csv → 300227.XSHE.csv | 差异行: 2510\n",
      "更新: sse.601952.csv → 601952.XSHG.csv | 差异行: 1812\n",
      "更新: sse.601998.csv → 601998.XSHG.csv | 差异行: 2659\n",
      "更新: szse.000933.csv → 000933.XSHE.csv | 差异行: 2639\n",
      "更新: szse.300151.csv → 300151.XSHE.csv | 差异行: 2498\n",
      "更新: szse.301121.csv → 301121.XSHE.csv | 差异行: 520\n",
      "更新: sse.600255.csv → 600255.XSHG.csv | 差异行: 1\n",
      "更新: sse.603866.csv → 603866.XSHG.csv | 差异行: 2124\n",
      "更新: sse.605186.csv → 605186.XSHG.csv | 差异行: 891\n",
      "更新: sse.601865.csv → 601865.XSHG.csv | 差异行: 1421\n",
      "更新: szse.002174.csv → 002174.XSHE.csv | 差异行: 2406\n",
      "更新: sse.605580.csv → 605580.XSHG.csv | 差异行: 744\n",
      "更新: sse.601696.csv → 601696.XSHG.csv | 差异行: 1141\n",
      "更新: szse.002803.csv → 002803.XSHE.csv | 差异行: 1993\n",
      "更新: sse.688398.csv → 688398.XSHG.csv | 差异行: 1134\n",
      "更新: sse.603839.csv → 603839.XSHG.csv | 差异行: 1\n",
      "更新: szse.001231.csv → 001231.XSHE.csv | 差异行: 511\n",
      "更新: sse.600685.csv → 600685.XSHG.csv | 差异行: 2376\n",
      "更新: sse.605377.csv → 605377.XSHG.csv | 差异行: 912\n",
      "更新: sse.605499.csv → 605499.XSHG.csv | 差异行: 815\n",
      "更新: szse.000751.csv → 000751.XSHE.csv | 差异行: 2452\n",
      "更新: sse.601218.csv → 601218.XSHG.csv | 差异行: 2620\n",
      "更新: szse.300856.csv → 300856.XSHE.csv | 差异行: 1000\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "更新: szse.002930.csv → 002930.XSHE.csv | 差异行: 1622\n",
      "更新: szse.002970.csv → 002970.XSHE.csv | 差异行: 1192\n",
      "更新: sse.688766.csv → 688766.XSHG.csv | 差异行: 768\n",
      "更新: sse.600376.csv → 600376.XSHG.csv | 差异行: 1\n",
      "更新: szse.301329.csv → 301329.XSHE.csv | 差异行: 293\n",
      "更新: szse.300488.csv → 300488.XSHE.csv | 差异行: 2147\n",
      "更新: sse.688680.csv → 688680.XSHG.csv | 差异行: 914\n",
      "更新: szse.002745.csv → 002745.XSHE.csv | 差异行: 2151\n",
      "更新: szse.300941.csv → 300941.XSHE.csv | 差异行: 889\n",
      "更新: szse.001332.csv → 001332.XSHE.csv | 差异行: 498\n",
      "更新: szse.002091.csv → 002091.XSHE.csv | 差异行: 2490\n",
      "更新: szse.301456.csv → 301456.XSHE.csv | 差异行: 351\n",
      "更新: sse.601198.csv → 601198.XSHG.csv | 差异行: 2334\n",
      "更新: szse.002322.csv → 002322.XSHE.csv | 差异行: 2524\n",
      "更新: sse.600420.csv → 600420.XSHG.csv | 差异行: 2487\n",
      "更新: sse.601083.csv → 601083.XSHG.csv | 差异行: 228\n",
      "更新: szse.002132.csv → 002132.XSHE.csv | 差异行: 2546\n",
      "更新: szse.001373.csv → 001373.XSHE.csv | 差异行: 371\n",
      "更新: sse.600273.csv → 600273.XSHG.csv | 差异行: 2481\n",
      "更新: sse.600621.csv → 600621.XSHG.csv | 差异行: 2554\n",
      "更新: sse.688105.csv → 688105.XSHG.csv | 差异行: 753\n",
      "更新: szse.301439.csv → 301439.XSHE.csv | 差异行: 413\n",
      "更新: sse.688075.csv → 688075.XSHG.csv | 差异行: 721\n",
      "更新: szse.000920.csv → 000920.XSHE.csv | 差异行: 2456\n",
      "更新: sse.603039.csv → 603039.XSHG.csv | 差异行: 1817\n",
      "更新: sse.603486.csv → 603486.XSHG.csv | 差异行: 1\n",
      "更新: sse.600211.csv → 600211.XSHG.csv | 差异行: 2457\n",
      "更新: sse.605117.csv → 605117.XSHG.csv | 差异行: 889\n",
      "更新: sse.688092.csv → 688092.XSHG.csv | 差异行: 865\n",
      "更新: szse.002646.csv → 002646.XSHE.csv | 差异行: 2605\n",
      "更新: sse.603391.csv → 603391.XSHG.csv | 差异行: 44\n",
      "更新: sse.601872.csv → 601872.XSHG.csv | 差异行: 2522\n",
      "更新: szse.301421.csv → 301421.XSHE.csv | 差异行: 273\n",
      "更新: szse.300286.csv → 300286.XSHE.csv | 差异行: 2598\n",
      "更新: sse.603032.csv → 603032.XSHG.csv | 差异行: 1\n",
      "更新: sse.688231.csv → 688231.XSHG.csv | 差异行: 577\n",
      "更新: szse.300512.csv → 300512.XSHE.csv | 差异行: 2039\n",
      "更新: sse.600926.csv → 600926.XSHG.csv | 差异行: 1950\n",
      "更新: sse.603505.csv → 603505.XSHG.csv | 差异行: 1836\n",
      "更新: szse.300384.csv → 300384.XSHE.csv | 差异行: 2362\n",
      "更新: szse.300110.csv → 300110.XSHE.csv | 差异行: 1\n",
      "更新: sse.603258.csv → 603258.XSHG.csv | 差异行: 1937\n",
      "更新: sse.688603.csv → 688603.XSHG.csv | 差异行: 361\n",
      "更新: sse.600452.csv → 600452.XSHG.csv | 差异行: 2621\n",
      "更新: sse.688056.csv → 688056.XSHG.csv | 差异行: 998\n",
      "更新: szse.300442.csv → 300442.XSHE.csv | 差异行: 2289\n",
      "更新: szse.002823.csv → 002823.XSHE.csv | 差异行: 1928\n",
      "更新: sse.600167.csv → 600167.XSHG.csv | 差异行: 2532\n",
      "更新: sse.601038.csv → 601038.XSHG.csv | 差异行: 1\n",
      "更新: sse.603496.csv → 603496.XSHG.csv | 差异行: 1769\n",
      "更新: szse.002270.csv → 002270.XSHE.csv | 差异行: 2477\n",
      "更新: sse.601238.csv → 601238.XSHG.csv | 差异行: 2613\n",
      "更新: szse.002790.csv → 002790.XSHE.csv | 差异行: 2137\n",
      "更新: szse.002009.csv → 002009.XSHE.csv | 差异行: 2484\n",
      "更新: szse.300758.csv → 300758.XSHE.csv | 差异行: 1360\n",
      "更新: szse.300373.csv → 300373.XSHE.csv | 差异行: 2563\n",
      "更新: szse.300562.csv → 300562.XSHE.csv | 差异行: 1895\n",
      "更新: sse.603190.csv → 603190.XSHG.csv | 差异行: 425\n",
      "更新: szse.300547.csv → 300547.XSHE.csv | 差异行: 1980\n",
      "更新: szse.000538.csv → 000538.XSHE.csv | 差异行: 2485\n",
      "更新: szse.002042.csv → 002042.XSHE.csv | 差异行: 2641\n",
      "更新: szse.300532.csv → 300532.XSHE.csv | 差异行: 1964\n",
      "更新: sse.605007.csv → 605007.XSHG.csv | 差异行: 1\n",
      "更新: szse.002249.csv → 002249.XSHE.csv | 差异行: 2519\n",
      "更新: szse.301087.csv → 301087.XSHE.csv | 差异行: 718\n",
      "更新: sse.603337.csv → 603337.XSHG.csv | 差异行: 1894\n",
      "更新: szse.002927.csv → 002927.XSHE.csv | 差异行: 1609\n",
      "更新: sse.601990.csv → 601990.XSHG.csv | 差异行: 1576\n",
      "更新: sse.600081.csv → 600081.XSHG.csv | 差异行: 2567\n",
      "更新: szse.300525.csv → 300525.XSHE.csv | 差异行: 1963\n",
      "更新: sse.601179.csv → 601179.XSHG.csv | 差异行: 2628\n",
      "更新: sse.600177.csv → 600177.XSHG.csv | 差异行: 2616\n",
      "更新: szse.002277.csv → 002277.XSHE.csv | 差异行: 2609\n",
      "更新: szse.002222.csv → 002222.XSHE.csv | 差异行: 2672\n",
      "更新: sse.601866.csv → 601866.XSHG.csv | 差异行: 2521\n",
      "更新: szse.301550.csv → 301550.XSHE.csv | 差异行: 257\n",
      "更新: szse.002533.csv → 002533.XSHE.csv | 差异行: 2607\n",
      "更新: szse.300003.csv → 300003.XSHE.csv | 差异行: 2503\n",
      "更新: sse.600094.csv → 600094.XSHG.csv | 差异行: 2570\n",
      "更新: szse.301210.csv → 301210.XSHE.csv | 差异行: 358\n",
      "更新: szse.000776.csv → 000776.XSHE.csv | 差异行: 2646\n",
      "更新: szse.002241.csv → 002241.XSHE.csv | 差异行: 2638\n",
      "更新: szse.000886.csv → 000886.XSHE.csv | 差异行: 2663\n",
      "更新: sse.605488.csv → 605488.XSHG.csv | 差异行: 885\n",
      "更新: sse.601985.csv → 601985.XSHG.csv | 差异行: 2304\n",
      "更新: sse.603155.csv → 603155.XSHG.csv | 差异行: 992\n",
      "更新: sse.603768.csv → 603768.XSHG.csv | 差异行: 1837\n",
      "更新: szse.300121.csv → 300121.XSHE.csv | 差异行: 2602\n",
      "更新: sse.601187.csv → 601187.XSHG.csv | 差异行: 1003\n",
      "更新: szse.002867.csv → 002867.XSHE.csv | 差异行: 1816\n",
      "更新: szse.002553.csv → 002553.XSHE.csv | 差异行: 2500\n",
      "更新: szse.301196.csv → 301196.XSHE.csv | 差异行: 658\n",
      "更新: sse.600535.csv → 600535.XSHG.csv | 差异行: 2645\n",
      "更新: sse.603048.csv → 603048.XSHG.csv | 差异行: 716\n",
      "更新: sse.601658.csv → 601658.XSHG.csv | 差异行: 1228\n",
      "更新: szse.001378.csv → 001378.XSHE.csv | 差异行: 279\n",
      "更新: sse.688271.csv → 688271.XSHG.csv | 差异行: 514\n",
      "更新: sse.688576.csv → 688576.XSHG.csv | 差异行: 296\n",
      "更新: szse.300866.csv → 300866.XSHE.csv | 差异行: 984\n",
      "更新: szse.002968.csv → 002968.XSHE.csv | 差异行: 1233\n",
      "更新: szse.002969.csv → 002969.XSHE.csv | 差异行: 1158\n",
      "更新: sse.603223.csv → 603223.XSHG.csv | 差异行: 2281\n",
      "更新: szse.301000.csv → 301000.XSHE.csv | 差异行: 811\n",
      "更新: sse.600681.csv → 600681.XSHG.csv | 差异行: 2349\n",
      "更新: sse.601857.csv → 601857.XSHG.csv | 差异行: 2607\n",
      "更新: szse.003000.csv → 003000.XSHE.csv | 差异行: 978\n",
      "更新: sse.600559.csv → 600559.XSHG.csv | 差异行: 1\n",
      "更新: sse.688106.csv → 688106.XSHG.csv | 差异行: 1035\n",
      "更新: szse.300259.csv → 300259.XSHE.csv | 差异行: 2637\n",
      "更新: sse.688113.csv → 688113.XSHG.csv | 差异行: 869\n",
      "更新: szse.300836.csv → 300836.XSHE.csv | 差异行: 1055\n",
      "更新: sse.600999.csv → 600999.XSHG.csv | 差异行: 2595\n",
      "更新: sse.603815.csv → 603815.XSHG.csv | 差异行: 1\n",
      "更新: szse.002675.csv → 002675.XSHE.csv | 差异行: 2287\n",
      "更新: szse.002714.csv → 002714.XSHE.csv | 差异行: 2631\n",
      "更新: szse.300757.csv → 300757.XSHE.csv | 差异行: 1360\n",
      "更新: szse.002043.csv → 002043.XSHE.csv | 差异行: 2498\n",
      "更新: sse.600597.csv → 600597.XSHG.csv | 差异行: 1\n",
      "更新: szse.301328.csv → 301328.XSHE.csv | 差异行: 484\n",
      "更新: szse.000913.csv → 000913.XSHE.csv | 差异行: 2601\n",
      "更新: szse.301603.csv → 301603.XSHE.csv | 差异行: 64\n",
      "更新: szse.000718.csv → 000718.XSHE.csv | 差异行: 2490\n",
      "更新: sse.600027.csv → 600027.XSHG.csv | 差异行: 2604\n",
      "更新: sse.603285.csv → 603285.XSHG.csv | 差异行: 44\n",
      "更新: szse.002985.csv → 002985.XSHE.csv | 差异行: 1072\n",
      "更新: sse.603559.csv → 603559.XSHG.csv | 差异行: 1880\n",
      "更新: sse.688200.csv → 688200.XSHG.csv | 差异行: 1127\n",
      "更新: szse.301088.csv → 301088.XSHE.csv | 差异行: 772\n",
      "更新: sse.688150.csv → 688150.XSHG.csv | 差异行: 614\n",
      "更新: szse.300718.csv → 300718.XSHE.csv | 差异行: 1685\n",
      "更新: szse.301202.csv → 301202.XSHE.csv | 差异行: 301\n",
      "更新: sse.603676.csv → 603676.XSHG.csv | 差异行: 1774\n",
      "更新: sse.600030.csv → 600030.XSHG.csv | 差异行: 2651\n",
      "更新: sse.601969.csv → 601969.XSHG.csv | 差异行: 2401\n",
      "更新: szse.300328.csv → 300328.XSHE.csv | 差异行: 2630\n",
      "更新: sse.603508.csv → 603508.XSHG.csv | 差异行: 2086\n",
      "更新: sse.603112.csv → 603112.XSHG.csv | 差异行: 1032\n",
      "更新: sse.688191.csv → 688191.XSHG.csv | 差异行: 889\n",
      "更新: sse.603057.csv → 603057.XSHG.csv | 差异行: 468\n",
      "更新: szse.300233.csv → 300233.XSHE.csv | 差异行: 2504\n",
      "更新: sse.603193.csv → 603193.XSHG.csv | 差异行: 251\n",
      "更新: szse.300737.csv → 300737.XSHE.csv | 差异行: 1620\n",
      "更新: szse.300421.csv → 300421.XSHE.csv | 差异行: 2273\n",
      "更新: szse.000598.csv → 000598.XSHE.csv | 差异行: 921\n",
      "更新: sse.605111.csv → 605111.XSHG.csv | 差异行: 975\n",
      "更新: sse.603236.csv → 603236.XSHG.csv | 差异行: 1263\n",
      "更新: szse.300448.csv → 300448.XSHE.csv | 差异行: 2286\n",
      "更新: sse.600202.csv → 600202.XSHG.csv | 差异行: 2531\n",
      "更新: szse.300632.csv → 300632.XSHE.csv | 差异行: 1864\n",
      "更新: sse.600409.csv → 600409.XSHG.csv | 差异行: 1\n",
      "更新: sse.600657.csv → 600657.XSHG.csv | 差异行: 1\n",
      "更新: sse.600475.csv → 600475.XSHG.csv | 差异行: 2526\n",
      "更新: sse.600482.csv → 600482.XSHG.csv | 差异行: 2520\n",
      "更新: sse.603065.csv → 603065.XSHG.csv | 差异行: 379\n",
      "更新: szse.300818.csv → 300818.XSHE.csv | 差异行: 1116\n",
      "更新: szse.301361.csv → 301361.XSHE.csv | 差异行: 490\n",
      "更新: szse.300501.csv → 300501.XSHE.csv | 差异行: 2133\n",
      "更新: sse.688205.csv → 688205.XSHG.csv | 差异行: 519\n",
      "更新: sse.600316.csv → 600316.XSHG.csv | 差异行: 1\n",
      "更新: sse.600217.csv → 600217.XSHG.csv | 差异行: 2357\n",
      "更新: sse.603169.csv → 603169.XSHG.csv | 差异行: 1\n",
      "更新: sse.600835.csv → 600835.XSHG.csv | 差异行: 2627\n",
      "更新: szse.000655.csv → 000655.XSHE.csv | 差异行: 2588\n",
      "更新: sse.688162.csv → 688162.XSHG.csv | 差异行: 749\n",
      "更新: sse.600085.csv → 600085.XSHG.csv | 差异行: 2617\n",
      "更新: szse.300664.csv → 300664.XSHE.csv | 差异行: 1618\n",
      "更新: szse.300809.csv → 300809.XSHE.csv | 差异行: 1187\n",
      "更新: sse.603577.csv → 603577.XSHG.csv | 差异行: 1888\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "更新: szse.002540.csv → 002540.XSHE.csv | 差异行: 2601\n",
      "更新: sse.601058.csv → 601058.XSHG.csv | 差异行: 2620\n",
      "更新: sse.600641.csv → 600641.XSHG.csv | 差异行: 2401\n",
      "更新: sse.600390.csv → 600390.XSHG.csv | 差异行: 2483\n",
      "更新: szse.300140.csv → 300140.XSHE.csv | 差异行: 2428\n",
      "更新: sse.600246.csv → 600246.XSHG.csv | 差异行: 1\n",
      "更新: sse.600959.csv → 600959.XSHG.csv | 差异行: 2168\n",
      "更新: sse.603180.csv → 603180.XSHG.csv | 差异行: 1851\n",
      "更新: sse.603201.csv → 603201.XSHG.csv | 差异行: 548\n",
      "更新: sse.600795.csv → 600795.XSHG.csv | 差异行: 2568\n",
      "更新: szse.002117.csv → 002117.XSHE.csv | 差异行: 2633\n",
      "更新: sse.600794.csv → 600794.XSHG.csv | 差异行: 2492\n",
      "更新: szse.000617.csv → 000617.XSHE.csv | 差异行: 2566\n",
      "更新: sse.688248.csv → 688248.XSHG.csv | 差异行: 676\n",
      "更新: szse.301261.csv → 301261.XSHE.csv | 差异行: 323\n",
      "更新: szse.000561.csv → 000561.XSHE.csv | 差异行: 2615\n",
      "更新: sse.688535.csv → 688535.XSHG.csv | 差异行: 377\n",
      "更新: szse.000716.csv → 000716.XSHE.csv | 差异行: 2335\n",
      "更新: szse.000895.csv → 000895.XSHE.csv | 差异行: 2588\n",
      "更新: sse.600456.csv → 600456.XSHG.csv | 差异行: 2589\n",
      "更新: szse.300761.csv → 300761.XSHE.csv | 差异行: 1346\n",
      "更新: szse.002536.csv → 002536.XSHE.csv | 差异行: 2638\n",
      "更新: sse.688679.csv → 688679.XSHG.csv | 差异行: 921\n",
      "更新: sse.601898.csv → 601898.XSHG.csv | 差异行: 2626\n",
      "更新: sse.600642.csv → 600642.XSHG.csv | 差异行: 1\n",
      "更新: sse.600986.csv → 600986.XSHG.csv | 差异行: 2456\n",
      "更新: sse.603170.csv → 603170.XSHG.csv | 差异行: 539\n",
      "更新: sse.688682.csv → 688682.XSHG.csv | 差异行: 835\n",
      "更新: szse.301327.csv → 301327.XSHE.csv | 差异行: 496\n",
      "更新: sse.600615.csv → 600615.XSHG.csv | 差异行: 2544\n",
      "更新: sse.601801.csv → 601801.XSHG.csv | 差异行: 2611\n",
      "更新: szse.002128.csv → 002128.XSHE.csv | 差异行: 2509\n",
      "更新: szse.002026.csv → 002026.XSHE.csv | 差异行: 2562\n",
      "更新: szse.001228.csv → 001228.XSHE.csv | 差异行: 626\n",
      "更新: szse.000403.csv → 000403.XSHE.csv | 差异行: 2384\n",
      "更新: szse.300453.csv → 300453.XSHE.csv | 差异行: 2259\n",
      "更新: sse.600056.csv → 600056.XSHG.csv | 差异行: 2598\n",
      "更新: szse.002555.csv → 002555.XSHE.csv | 差异行: 2413\n",
      "更新: sse.605136.csv → 605136.XSHG.csv | 差异行: 968\n",
      "更新: szse.300784.csv → 300784.XSHE.csv | 差异行: 67\n",
      "更新: szse.301308.csv → 301308.XSHE.csv | 差异行: 536\n",
      "更新: szse.300193.csv → 300193.XSHE.csv | 差异行: 2625\n",
      "更新: sse.600710.csv → 600710.XSHG.csv | 差异行: 1\n",
      "更新: szse.002552.csv → 002552.XSHE.csv | 差异行: 2543\n",
      "更新: szse.300658.csv → 300658.XSHE.csv | 差异行: 1792\n",
      "更新: sse.688195.csv → 688195.XSHG.csv | 差异行: 876\n",
      "更新: szse.300755.csv → 300755.XSHE.csv | 差异行: 1429\n",
      "更新: sse.603273.csv → 603273.XSHG.csv | 差异行: 252\n",
      "更新: sse.601881.csv → 601881.XSHG.csv | 差异行: 1915\n",
      "更新: sse.603719.csv → 603719.XSHG.csv | 差异行: 1146\n",
      "更新: szse.002338.csv → 002338.XSHE.csv | 差异行: 2586\n",
      "更新: szse.300993.csv → 300993.XSHE.csv | 差异行: 826\n",
      "更新: szse.000517.csv → 000517.XSHE.csv | 差异行: 2545\n",
      "更新: szse.300695.csv → 300695.XSHE.csv | 差异行: 1717\n",
      "更新: szse.002154.csv → 002154.XSHE.csv | 差异行: 2602\n",
      "更新: szse.301499.csv → 301499.XSHE.csv | 差异行: 286\n",
      "更新: szse.002293.csv → 002293.XSHE.csv | 差异行: 2598\n",
      "更新: sse.688013.csv → 688013.XSHG.csv | 差异行: 974\n",
      "更新: sse.603113.csv → 603113.XSHG.csv | 差异行: 1\n",
      "更新: szse.301050.csv → 301050.XSHE.csv | 差异行: 746\n",
      "更新: sse.600469.csv → 600469.XSHG.csv | 差异行: 2476\n",
      "更新: szse.300982.csv → 300982.XSHE.csv | 差异行: 831\n",
      "更新: sse.600980.csv → 600980.XSHG.csv | 差异行: 2593\n",
      "更新: sse.603363.csv → 603363.XSHG.csv | 差异行: 1\n",
      "更新: sse.600663.csv → 600663.XSHG.csv | 差异行: 2533\n",
      "更新: szse.300403.csv → 300403.XSHE.csv | 差异行: 2403\n",
      "更新: szse.002998.csv → 002998.XSHE.csv | 差异行: 1033\n",
      "更新: sse.603390.csv → 603390.XSHG.csv | 差异行: 1169\n",
      "更新: sse.600389.csv → 600389.XSHG.csv | 差异行: 2480\n",
      "更新: sse.600019.csv → 600019.XSHG.csv | 差异行: 2519\n",
      "更新: sse.600737.csv → 600737.XSHG.csv | 差异行: 2619\n",
      "更新: sse.688046.csv → 688046.XSHG.csv | 差异行: 612\n",
      "更新: szse.300498.csv → 300498.XSHE.csv | 差异行: 2188\n",
      "更新: sse.600537.csv → 600537.XSHG.csv | 差异行: 1\n",
      "更新: szse.300751.csv → 300751.XSHE.csv | 差异行: 1428\n",
      "更新: sse.688290.csv → 688290.XSHG.csv | 差异行: 630\n",
      "更新: sse.600406.csv → 600406.XSHG.csv | 差异行: 2519\n",
      "更新: sse.603818.csv → 603818.XSHG.csv | 差异行: 2304\n",
      "更新: szse.002932.csv → 002932.XSHE.csv | 差异行: 1520\n",
      "更新: sse.688188.csv → 688188.XSHG.csv | 差异行: 1255\n",
      "更新: sse.600705.csv → 600705.XSHG.csv | 差异行: 2489\n",
      "更新: sse.600918.csv → 600918.XSHG.csv | 差异行: 1051\n",
      "更新: szse.301608.csv → 301608.XSHE.csv | 差异行: 38\n",
      "更新: szse.301262.csv → 301262.XSHE.csv | 差异行: 300\n",
      "更新: sse.600858.csv → 600858.XSHG.csv | 差异行: 2534\n",
      "更新: sse.600528.csv → 600528.XSHG.csv | 差异行: 2520\n",
      "更新: szse.000726.csv → 000726.XSHE.csv | 差异行: 2665\n",
      "更新: szse.300281.csv → 300281.XSHE.csv | 差异行: 2607\n",
      "更新: szse.002003.csv → 002003.XSHE.csv | 差异行: 2522\n",
      "更新: sse.603275.csv → 603275.XSHG.csv | 差异行: 294\n",
      "更新: szse.000681.csv → 000681.XSHE.csv | 差异行: 2578\n",
      "更新: sse.600178.csv → 600178.XSHG.csv | 差异行: 2641\n",
      "更新: sse.688336.csv → 688336.XSHG.csv | 差异行: 1017\n",
      "更新: sse.688193.csv → 688193.XSHG.csv | 差异行: 625\n",
      "更新: sse.600184.csv → 600184.XSHG.csv | 差异行: 1\n",
      "更新: sse.600398.csv → 600398.XSHG.csv | 差异行: 2589\n",
      "更新: szse.002859.csv → 002859.XSHE.csv | 差异行: 1859\n",
      "更新: szse.300824.csv → 300824.XSHE.csv | 差异行: 1038\n",
      "更新: szse.301345.csv → 301345.XSHE.csv | 差异行: 434\n",
      "更新: szse.001339.csv → 001339.XSHE.csv | 差异行: 494\n",
      "更新: szse.301116.csv → 301116.XSHE.csv | 差异行: 681\n",
      "更新: szse.002444.csv → 002444.XSHE.csv | 差异行: 2652\n",
      "更新: sse.605123.csv → 605123.XSHG.csv | 差异行: 1004\n",
      "更新: szse.300884.csv → 300884.XSHE.csv | 差异行: 933\n",
      "更新: sse.688578.csv → 688578.XSHG.csv | 差异行: 914\n",
      "更新: sse.600477.csv → 600477.XSHG.csv | 差异行: 2604\n",
      "更新: szse.300209.csv → 300209.XSHE.csv | 差异行: 2399\n",
      "更新: szse.002481.csv → 002481.XSHE.csv | 差异行: 2507\n",
      "更新: sse.603098.csv → 603098.XSHG.csv | 差异行: 1867\n",
      "更新: szse.002271.csv → 002271.XSHE.csv | 差异行: 2612\n",
      "更新: sse.600392.csv → 600392.XSHG.csv | 差异行: 2556\n",
      "更新: szse.000685.csv → 000685.XSHE.csv | 差异行: 27\n",
      "更新: sse.600927.csv → 600927.XSHG.csv | 差异行: 692\n",
      "更新: sse.600219.csv → 600219.XSHG.csv | 差异行: 2543\n",
      "更新: sse.601633.csv → 601633.XSHG.csv | 差异行: 1\n",
      "更新: sse.601116.csv → 601116.XSHG.csv | 差异行: 1\n",
      "更新: sse.603633.csv → 603633.XSHG.csv | 差异行: 1883\n",
      "更新: szse.300394.csv → 300394.XSHE.csv | 差异行: 2334\n",
      "更新: szse.002891.csv → 002891.XSHE.csv | 差异行: 1750\n",
      "更新: szse.300122.csv → 300122.XSHE.csv | 差异行: 2605\n",
      "更新: szse.002181.csv → 002181.XSHE.csv | 差异行: 2573\n",
      "更新: sse.601059.csv → 601059.XSHG.csv | 差异行: 420\n",
      "更新: szse.301035.csv → 301035.XSHE.csv | 差异行: 761\n",
      "更新: sse.603200.csv → 603200.XSHG.csv | 差异行: 1\n",
      "更新: sse.688507.csv → 688507.XSHG.csv | 差异行: 360\n",
      "更新: sse.601212.csv → 601212.XSHG.csv | 差异行: 1787\n",
      "更新: szse.002749.csv → 002749.XSHE.csv | 差异行: 2299\n",
      "更新: sse.600817.csv → 600817.XSHG.csv | 差异行: 2222\n",
      "更新: sse.600459.csv → 600459.XSHG.csv | 差异行: 1\n",
      "更新: szse.000001.csv → 000001.XSHE.csv | 差异行: 2616\n",
      "更新: sse.600284.csv → 600284.XSHG.csv | 差异行: 2666\n",
      "更新: szse.002972.csv → 002972.XSHE.csv | 差异行: 1152\n",
      "更新: szse.300634.csv → 300634.XSHE.csv | 差异行: 1624\n",
      "更新: sse.603345.csv → 603345.XSHG.csv | 差异行: 1808\n",
      "更新: szse.002847.csv → 002847.XSHE.csv | 差异行: 1846\n",
      "更新: szse.301498.csv → 301498.XSHE.csv | 差异行: 308\n",
      "更新: sse.688409.csv → 688409.XSHG.csv | 差异行: 496\n",
      "更新: szse.002408.csv → 002408.XSHE.csv | 差异行: 2498\n",
      "更新: szse.002223.csv → 002223.XSHE.csv | 差异行: 2542\n",
      "更新: sse.601788.csv → 601788.XSHG.csv | 差异行: 2654\n",
      "更新: szse.300409.csv → 300409.XSHE.csv | 差异行: 2299\n",
      "更新: szse.300560.csv → 300560.XSHE.csv | 差异行: 1904\n",
      "更新: sse.688036.csv → 688036.XSHG.csv | 差异行: 1245\n",
      "更新: sse.603881.csv → 603881.XSHG.csv | 差异行: 1864\n",
      "更新: sse.605066.csv → 605066.XSHG.csv | 差异行: 1002\n",
      "更新: sse.601136.csv → 601136.XSHG.csv | 差异行: 481\n",
      "更新: sse.603327.csv → 603327.XSHG.csv | 差异行: 1\n",
      "更新: sse.600079.csv → 600079.XSHG.csv | 差异行: 2590\n",
      "更新: szse.002811.csv → 002811.XSHE.csv | 差异行: 1941\n",
      "更新: sse.688016.csv → 688016.XSHG.csv | 差异行: 1285\n",
      "更新: sse.600169.csv → 600169.XSHG.csv | 差异行: 1\n",
      "更新: sse.600895.csv → 600895.XSHG.csv | 差异行: 2620\n",
      "更新: szse.002303.csv → 002303.XSHE.csv | 差异行: 2526\n",
      "更新: sse.600480.csv → 600480.XSHG.csv | 差异行: 2480\n",
      "更新: sse.601825.csv → 601825.XSHG.csv | 差异行: 751\n",
      "更新: sse.603416.csv → 603416.XSHG.csv | 差异行: 1\n",
      "更新: sse.603222.csv → 603222.XSHG.csv | 差异行: 1\n",
      "更新: sse.600117.csv → 600117.XSHG.csv | 差异行: 1\n",
      "更新: szse.000962.csv → 000962.XSHE.csv | 差异行: 2486\n",
      "更新: sse.603355.csv → 603355.XSHG.csv | 差异行: 2308\n",
      "更新: sse.603588.csv → 603588.XSHG.csv | 差异行: 2273\n",
      "更新: sse.600967.csv → 600967.XSHG.csv | 差异行: 2521\n",
      "更新: szse.301071.csv → 301071.XSHE.csv | 差异行: 774\n",
      "更新: sse.600232.csv → 600232.XSHG.csv | 差异行: 2476\n",
      "更新: sse.603348.csv → 603348.XSHG.csv | 差异行: 1560\n",
      "更新: szse.000680.csv → 000680.XSHE.csv | 差异行: 2675\n",
      "更新: szse.300622.csv → 300622.XSHE.csv | 差异行: 1841\n",
      "更新: sse.688115.csv → 688115.XSHG.csv | 差异行: 628\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "更新: szse.001206.csv → 001206.XSHE.csv | 差异行: 873\n",
      "更新: sse.603976.csv → 603976.XSHG.csv | 差异行: 1723\n",
      "更新: sse.603551.csv → 603551.XSHG.csv | 差异行: 1141\n",
      "更新: szse.301505.csv → 301505.XSHE.csv | 差异行: 301\n",
      "更新: szse.002363.csv → 002363.XSHE.csv | 差异行: 2607\n",
      "更新: sse.688129.csv → 688129.XSHG.csv | 差异行: 1002\n",
      "更新: sse.600692.csv → 600692.XSHG.csv | 差异行: 2601\n",
      "更新: sse.605086.csv → 605086.XSHG.csv | 差异行: 895\n",
      "更新: sse.603214.csv → 603214.XSHG.csv | 差异行: 1580\n",
      "更新: szse.002039.csv → 002039.XSHE.csv | 差异行: 2617\n",
      "更新: sse.603331.csv → 603331.XSHG.csv | 差异行: 1\n",
      "更新: szse.000949.csv → 000949.XSHE.csv | 差异行: 2666\n",
      "更新: sse.688289.csv → 688289.XSHG.csv | 差异行: 989\n",
      "更新: szse.301448.csv → 301448.XSHE.csv | 差异行: 319\n",
      "更新: sse.688318.csv → 688318.XSHG.csv | 差异行: 1084\n",
      "更新: sse.601199.csv → 601199.XSHG.csv | 差异行: 2594\n",
      "更新: szse.300801.csv → 300801.XSHE.csv | 差异行: 1204\n",
      "更新: szse.002734.csv → 002734.XSHE.csv | 差异行: 2352\n",
      "更新: sse.600276.csv → 600276.XSHG.csv | 差异行: 1\n",
      "更新: szse.000925.csv → 000925.XSHE.csv | 差异行: 2368\n",
      "更新: szse.002833.csv → 002833.XSHE.csv | 差异行: 1893\n",
      "更新: szse.002538.csv → 002538.XSHE.csv | 差异行: 2567\n",
      "更新: szse.300628.csv → 300628.XSHE.csv | 差异行: 1831\n",
      "更新: szse.000568.csv → 000568.XSHE.csv | 差异行: 2572\n",
      "更新: sse.603062.csv → 603062.XSHG.csv | 差异行: 226\n",
      "更新: szse.301256.csv → 301256.XSHE.csv | 差异行: 627\n",
      "更新: sse.600780.csv → 600780.XSHG.csv | 差异行: 1\n",
      "更新: szse.300563.csv → 300563.XSHE.csv | 差异行: 1911\n",
      "更新: szse.301172.csv → 301172.XSHE.csv | 差异行: 286\n",
      "更新: sse.603003.csv → 603003.XSHG.csv | 差异行: 2493\n",
      "更新: sse.605369.csv → 605369.XSHG.csv | 差异行: 989\n",
      "更新: sse.600157.csv → 600157.XSHG.csv | 差异行: 2348\n",
      "更新: sse.605368.csv → 605368.XSHG.csv | 差异行: 881\n",
      "更新: szse.301282.csv → 301282.XSHE.csv | 差异行: 559\n",
      "更新: sse.601336.csv → 601336.XSHG.csv | 差异行: 2628\n",
      "更新: sse.688006.csv → 688006.XSHG.csv | 差异行: 1268\n",
      "更新: szse.002422.csv → 002422.XSHE.csv | 差异行: 2604\n",
      "更新: szse.301335.csv → 301335.XSHE.csv | 差异行: 459\n",
      "更新: sse.605319.csv → 605319.XSHG.csv | 差异行: 821\n",
      "更新: sse.600789.csv → 600789.XSHG.csv | 差异行: 2656\n",
      "更新: szse.300861.csv → 300861.XSHE.csv | 差异行: 1029\n",
      "更新: szse.300443.csv → 300443.XSHE.csv | 差异行: 2331\n",
      "更新: sse.601607.csv → 601607.XSHG.csv | 差异行: 2610\n",
      "更新: sse.688550.csv → 688550.XSHG.csv | 差异行: 968\n",
      "更新: szse.000999.csv → 000999.XSHE.csv | 差异行: 2635\n",
      "更新: szse.300707.csv → 300707.XSHE.csv | 差异行: 1687\n",
      "更新: szse.002810.csv → 002810.XSHE.csv | 差异行: 2027\n",
      "更新: szse.301418.csv → 301418.XSHE.csv | 差异行: 268\n",
      "更新: sse.601127.csv → 601127.XSHG.csv | 差异行: 2041\n",
      "更新: szse.002931.csv → 002931.XSHE.csv | 差异行: 1583\n",
      "更新: sse.601236.csv → 601236.XSHG.csv | 差异行: 1270\n",
      "更新: sse.603132.csv → 603132.XSHG.csv | 差异行: 627\n",
      "更新: sse.603105.csv → 603105.XSHG.csv | 差异行: 1\n",
      "更新: szse.301326.csv → 301326.XSHE.csv | 差异行: 484\n",
      "更新: sse.600352.csv → 600352.XSHG.csv | 差异行: 2601\n",
      "更新: szse.301310.csv → 301310.XSHE.csv | 差异行: 313\n",
      "更新: sse.600375.csv → 600375.XSHG.csv | 差异行: 2444\n",
      "更新: sse.600288.csv → 600288.XSHG.csv | 差异行: 2533\n",
      "更新: sse.603078.csv → 603078.XSHG.csv | 差异行: 1808\n",
      "更新: sse.688646.csv → 688646.XSHG.csv | 差异行: 293\n",
      "更新: sse.601677.csv → 601677.XSHG.csv | 差异行: 2676\n",
      "更新: sse.603310.csv → 603310.XSHG.csv | 差异行: 43\n",
      "更新: szse.002961.csv → 002961.XSHE.csv | 差异行: 1253\n",
      "更新: szse.002027.csv → 002027.XSHE.csv | 差异行: 2521\n",
      "更新: szse.002050.csv → 002050.XSHE.csv | 差异行: 2512\n",
      "更新: szse.000777.csv → 000777.XSHE.csv | 差异行: 2645\n",
      "更新: sse.601009.csv → 601009.XSHG.csv | 差异行: 2625\n",
      "更新: sse.601121.csv → 601121.XSHG.csv | 差异行: 363\n",
      "更新: szse.002165.csv → 002165.XSHE.csv | 差异行: 2524\n",
      "更新: szse.001234.csv → 001234.XSHE.csv | 差异行: 656\n",
      "更新: sse.600369.csv → 600369.XSHG.csv | 差异行: 2610\n",
      "更新: szse.300741.csv → 300741.XSHE.csv | 差异行: 1606\n",
      "更新: szse.001306.csv → 001306.XSHE.csv | 差异行: 271\n",
      "更新: sse.603013.csv → 603013.XSHG.csv | 差异行: 1562\n",
      "更新: sse.600960.csv → 600960.XSHG.csv | 差异行: 1\n",
      "更新: szse.000400.csv → 000400.XSHE.csv | 差异行: 2627\n",
      "更新: sse.600519.csv → 600519.XSHG.csv | 差异行: 2668\n",
      "更新: sse.688353.csv → 688353.XSHG.csv | 差异行: 581\n",
      "更新: sse.688628.csv → 688628.XSHG.csv | 差异行: 906\n",
      "更新: sse.600097.csv → 600097.XSHG.csv | 差异行: 1\n",
      "更新: sse.600066.csv → 600066.XSHG.csv | 差异行: 2625\n",
      "更新: szse.002286.csv → 002286.XSHE.csv | 差异行: 2509\n",
      "更新: szse.300888.csv → 300888.XSHE.csv | 差异行: 977\n",
      "更新: sse.600577.csv → 600577.XSHG.csv | 差异行: 2392\n",
      "更新: szse.301003.csv → 301003.XSHE.csv | 差异行: 801\n",
      "更新: sse.688484.csv → 688484.XSHG.csv | 差异行: 350\n",
      "更新: sse.600633.csv → 600633.XSHG.csv | 差异行: 2478\n",
      "更新: sse.603858.csv → 603858.XSHG.csv | 差异行: 1\n",
      "更新: szse.002500.csv → 002500.XSHE.csv | 差异行: 2662\n",
      "更新: sse.688563.csv → 688563.XSHG.csv | 差异行: 296\n",
      "更新: sse.601628.csv → 601628.XSHG.csv | 差异行: 2641\n",
      "更新: szse.002409.csv → 002409.XSHE.csv | 差异行: 2315\n",
      "更新: sse.688208.csv → 688208.XSHG.csv | 差异行: 1113\n",
      "更新: szse.301179.csv → 301179.XSHE.csv | 差异行: 681\n",
      "更新: sse.688548.csv → 688548.XSHG.csv | 差异行: 298\n",
      "更新: sse.603529.csv → 603529.XSHG.csv | 差异行: 808\n",
      "更新: szse.301538.csv → 301538.XSHE.csv | 差异行: 133\n",
      "更新: szse.002939.csv → 002939.XSHE.csv | 差异行: 1494\n",
      "更新: sse.603871.csv → 603871.XSHG.csv | 差异行: 1631\n",
      "更新: sse.688566.csv → 688566.XSHG.csv | 差异行: 1092\n",
      "更新: sse.600822.csv → 600822.XSHG.csv | 差异行: 1\n",
      "更新: sse.600121.csv → 600121.XSHG.csv | 差异行: 1\n",
      "更新: sse.600754.csv → 600754.XSHG.csv | 差异行: 2483\n",
      "更新: szse.300650.csv → 300650.XSHE.csv | 差异行: 1796\n",
      "更新: sse.688698.csv → 688698.XSHG.csv | 差异行: 924\n",
      "更新: sse.601799.csv → 601799.XSHG.csv | 差异行: 2613\n",
      "更新: sse.688029.csv → 688029.XSHG.csv | 差异行: 1263\n",
      "更新: szse.300487.csv → 300487.XSHE.csv | 差异行: 2299\n",
      "更新: sse.603166.csv → 603166.XSHG.csv | 差异行: 2383\n",
      "更新: szse.301213.csv → 301213.XSHE.csv | 差异行: 686\n",
      "更新: szse.000563.csv → 000563.XSHE.csv | 差异行: 2571\n",
      "更新: sse.601595.csv → 601595.XSHG.csv | 差异行: 2026\n",
      "更新: sse.600335.csv → 600335.XSHG.csv | 差异行: 2486\n",
      "更新: sse.600750.csv → 600750.XSHG.csv | 差异行: 2552\n",
      "更新: szse.000525.csv → 000525.XSHE.csv | 差异行: 2617\n",
      "更新: szse.002818.csv → 002818.XSHE.csv | 差异行: 1927\n",
      "更新: sse.688375.csv → 688375.XSHG.csv | 差异行: 542\n",
      "更新: szse.002757.csv → 002757.XSHE.csv | 差异行: 2164\n",
      "更新: szse.301158.csv → 301158.XSHE.csv | 差异行: 703\n",
      "更新: sse.603307.csv → 603307.XSHG.csv | 差异行: 392\n",
      "更新: sse.600769.csv → 600769.XSHG.csv | 差异行: 1\n",
      "更新: sse.601918.csv → 601918.XSHG.csv | 差异行: 1\n",
      "更新: sse.600941.csv → 600941.XSHG.csv | 差异行: 645\n",
      "更新: sse.600826.csv → 600826.XSHG.csv | 差异行: 2623\n",
      "更新: sse.600638.csv → 600638.XSHG.csv | 差异行: 2589\n",
      "更新: sse.601388.csv → 601388.XSHG.csv | 差异行: 2495\n",
      "更新: sse.688002.csv → 688002.XSHG.csv | 差异行: 1281\n",
      "更新: sse.688159.csv → 688159.XSHG.csv | 差异行: 1\n",
      "更新: sse.603678.csv → 603678.XSHG.csv | 差异行: 2343\n",
      "更新: szse.002275.csv → 002275.XSHE.csv | 差异行: 2648\n",
      "更新: sse.603876.csv → 603876.XSHG.csv | 差异行: 1583\n",
      "更新: sse.603682.csv → 603682.XSHG.csv | 差异行: 1081\n",
      "更新: szse.301187.csv → 301187.XSHE.csv | 差异行: 592\n",
      "更新: szse.000915.csv → 000915.XSHE.csv | 差异行: 2613\n",
      "更新: szse.300400.csv → 300400.XSHE.csv | 差异行: 2412\n",
      "更新: sse.600529.csv → 600529.XSHG.csv | 差异行: 2571\n",
      "更新: szse.002171.csv → 002171.XSHE.csv | 差异行: 2444\n",
      "更新: sse.600336.csv → 600336.XSHG.csv | 差异行: 2623\n",
      "更新: sse.688789.csv → 688789.XSHG.csv | 差异行: 785\n",
      "更新: sse.688293.csv → 688293.XSHG.csv | 差异行: 496\n",
      "更新: szse.002457.csv → 002457.XSHE.csv | 差异行: 2594\n",
      "更新: sse.603787.csv → 603787.XSHG.csv | 差异行: 1806\n",
      "更新: szse.002075.csv → 002075.XSHE.csv | 差异行: 1937\n",
      "更新: sse.600180.csv → 600180.XSHG.csv | 差异行: 2633\n",
      "更新: sse.600517.csv → 600517.XSHG.csv | 差异行: 2558\n",
      "更新: szse.301606.csv → 301606.XSHE.csv | 差异行: 43\n",
      "更新: szse.002632.csv → 002632.XSHE.csv | 差异行: 2478\n",
      "更新: sse.600050.csv → 600050.XSHG.csv | 差异行: 2536\n",
      "更新: szse.301206.csv → 301206.XSHE.csv | 差异行: 641\n",
      "更新: sse.601225.csv → 601225.XSHG.csv | 差异行: 2608\n",
      "更新: szse.300855.csv → 300855.XSHE.csv | 差异行: 1025\n",
      "更新: sse.600938.csv → 600938.XSHG.csv | 差异行: 603\n",
      "更新: sse.603915.csv → 603915.XSHG.csv | 差异行: 1291\n",
      "更新: sse.603638.csv → 603638.XSHG.csv | 差异行: 1916\n",
      "更新: szse.002606.csv → 002606.XSHE.csv | 差异行: 2460\n",
      "更新: sse.603012.csv → 603012.XSHG.csv | 差异行: 1\n",
      "更新: sse.688799.csv → 688799.XSHG.csv | 差异行: 795\n",
      "更新: szse.301168.csv → 301168.XSHE.csv | 差异行: 689\n",
      "更新: sse.688334.csv → 688334.XSHG.csv | 差异行: 346\n",
      "更新: szse.300258.csv → 300258.XSHE.csv | 差异行: 2614\n",
      "更新: szse.300441.csv → 300441.XSHE.csv | 差异行: 2051\n",
      "更新: szse.001296.csv → 001296.XSHE.csv | 差异行: 732\n",
      "更新: szse.301078.csv → 301078.XSHE.csv | 差异行: 720\n",
      "更新: sse.603718.csv → 603718.XSHG.csv | 差异行: 1\n",
      "更新: szse.300130.csv → 300130.XSHE.csv | 差异行: 2595\n",
      "更新: szse.300430.csv → 300430.XSHE.csv | 差异行: 2274\n",
      "更新: szse.002019.csv → 002019.XSHE.csv | 差异行: 2560\n",
      "更新: szse.301061.csv → 301061.XSHE.csv | 差异行: 735\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "更新: szse.300626.csv → 300626.XSHE.csv | 差异行: 1826\n",
      "更新: sse.600958.csv → 600958.XSHG.csv | 差异行: 2356\n",
      "更新: szse.301215.csv → 301215.XSHE.csv | 差异行: 653\n",
      "更新: sse.688717.csv → 688717.XSHG.csv | 差异行: 233\n",
      "更新: szse.002252.csv → 002252.XSHE.csv | 差异行: 2213\n",
      "更新: szse.300641.csv → 300641.XSHE.csv | 差异行: 1836\n",
      "更新: sse.600839.csv → 600839.XSHG.csv | 差异行: 2579\n",
      "更新: sse.603960.csv → 603960.XSHG.csv | 差异行: 1777\n",
      "更新: szse.301337.csv → 301337.XSHE.csv | 差异行: 388\n",
      "更新: sse.600070.csv → 600070.XSHG.csv | 差异行: 1\n",
      "更新: szse.002978.csv → 002978.XSHE.csv | 差异行: 1073\n",
      "更新: szse.300496.csv → 300496.XSHE.csv | 差异行: 2075\n",
      "更新: sse.601619.csv → 601619.XSHG.csv | 差异行: 1625\n",
      "更新: szse.300573.csv → 300573.XSHE.csv | 差异行: 1905\n",
      "更新: sse.688519.csv → 688519.XSHG.csv | 差异行: 991\n",
      "更新: sse.600329.csv → 600329.XSHG.csv | 差异行: 1\n",
      "更新: szse.002817.csv → 002817.XSHE.csv | 差异行: 1992\n",
      "更新: szse.301515.csv → 301515.XSHE.csv | 差异行: 341\n",
      "更新: sse.603229.csv → 603229.XSHG.csv | 差异行: 1\n",
      "更新: szse.301149.csv → 301149.XSHE.csv | 差异行: 751\n",
      "更新: szse.300960.csv → 300960.XSHE.csv | 差异行: 845\n",
      "更新: szse.301376.csv → 301376.XSHE.csv | 差异行: 351\n",
      "更新: szse.001337.csv → 001337.XSHE.csv | 差异行: 382\n",
      "更新: szse.003009.csv → 003009.XSHE.csv | 差异行: 971\n",
      "更新: sse.688560.csv → 688560.XSHG.csv | 差异行: 1\n",
      "更新: sse.601139.csv → 601139.XSHG.csv | 差异行: 1\n",
      "更新: sse.603933.csv → 603933.XSHG.csv | 差异行: 1786\n",
      "更新: szse.300493.csv → 300493.XSHE.csv | 差异行: 2126\n",
      "更新: szse.300978.csv → 300978.XSHE.csv | 差异行: 878\n",
      "更新: szse.000581.csv → 000581.XSHE.csv | 差异行: 2616\n",
      "更新: sse.600774.csv → 600774.XSHG.csv | 差异行: 1\n",
      "更新: szse.000950.csv → 000950.XSHE.csv | 差异行: 2174\n",
      "更新: sse.600396.csv → 600396.XSHG.csv | 差异行: 1\n",
      "更新: szse.000750.csv → 000750.XSHE.csv | 差异行: 2560\n",
      "更新: szse.301336.csv → 301336.XSHE.csv | 差异行: 515\n",
      "更新: szse.000937.csv → 000937.XSHE.csv | 差异行: 2623\n",
      "更新: sse.688352.csv → 688352.XSHG.csv | 差异行: 385\n",
      "更新: szse.300870.csv → 300870.XSHE.csv | 差异行: 996\n",
      "更新: sse.600821.csv → 600821.XSHG.csv | 差异行: 2559\n",
      "更新: szse.001336.csv → 001336.XSHE.csv | 差异行: 540\n",
      "更新: szse.300795.csv → 300795.XSHE.csv | 差异行: 1182\n",
      "更新: szse.301042.csv → 301042.XSHE.csv | 差异行: 799\n",
      "更新: sse.688366.csv → 688366.XSHG.csv | 差异行: 1198\n",
      "更新: sse.600694.csv → 600694.XSHG.csv | 差异行: 1\n",
      "更新: szse.300470.csv → 300470.XSHE.csv | 差异行: 2271\n",
      "更新: szse.300099.csv → 300099.XSHE.csv | 差异行: 2490\n",
      "更新: szse.003008.csv → 003008.XSHE.csv | 差异行: 960\n",
      "更新: sse.601377.csv → 601377.XSHG.csv | 差异行: 2655\n",
      "更新: sse.601369.csv → 601369.XSHG.csv | 差异行: 2578\n",
      "更新: sse.603130.csv → 603130.XSHG.csv | 差异行: 446\n",
      "更新: sse.600679.csv → 600679.XSHG.csv | 差异行: 2547\n",
      "更新: szse.301123.csv → 301123.XSHE.csv | 差异行: 648\n",
      "更新: sse.688498.csv → 688498.XSHG.csv | 差异行: 492\n",
      "更新: sse.688314.csv → 688314.XSHG.csv | 差异行: 862\n",
      "更新: sse.600551.csv → 600551.XSHG.csv | 差异行: 2531\n",
      "更新: sse.601886.csv → 601886.XSHG.csv | 差异行: 2612\n",
      "更新: sse.603869.csv → 603869.XSHG.csv | 差异行: 1\n",
      "更新: sse.688236.csv → 688236.XSHG.csv | 差异行: 701\n",
      "更新: sse.603992.csv → 603992.XSHG.csv | 差异行: 1221\n",
      "更新: szse.000997.csv → 000997.XSHE.csv | 差异行: 2557\n",
      "更新: sse.603389.csv → 603389.XSHG.csv | 差异行: 1\n",
      "更新: sse.600187.csv → 600187.XSHG.csv | 差异行: 1\n",
      "更新: szse.002558.csv → 002558.XSHE.csv | 差异行: 2243\n",
      "更新: szse.301007.csv → 301007.XSHE.csv | 差异行: 799\n",
      "更新: szse.300577.csv → 300577.XSHE.csv | 差异行: 1927\n",
      "更新: szse.300417.csv → 300417.XSHE.csv | 差异行: 2356\n",
      "更新: sse.601298.csv → 601298.XSHG.csv | 差异行: 1435\n",
      "更新: sse.688190.csv → 688190.XSHG.csv | 差异行: 695\n",
      "更新: sse.601330.csv → 601330.XSHG.csv | 差异行: 1563\n",
      "更新: sse.688612.csv → 688612.XSHG.csv | 差异行: 311\n",
      "更新: szse.002273.csv → 002273.XSHE.csv | 差异行: 2594\n",
      "更新: szse.000628.csv → 000628.XSHE.csv | 差异行: 2543\n",
      "更新: szse.300965.csv → 300965.XSHE.csv | 差异行: 850\n",
      "更新: szse.002852.csv → 002852.XSHE.csv | 差异行: 1863\n",
      "更新: sse.601555.csv → 601555.XSHG.csv | 差异行: 2604\n",
      "更新: sse.688155.csv → 688155.XSHG.csv | 差异行: 996\n",
      "更新: szse.000409.csv → 000409.XSHE.csv | 差异行: 161\n",
      "更新: szse.002988.csv → 002988.XSHE.csv | 差异行: 1059\n",
      "更新: sse.600223.csv → 600223.XSHG.csv | 差异行: 2624\n",
      "更新: sse.600235.csv → 600235.XSHG.csv | 差异行: 2609\n",
      "更新: szse.300294.csv → 300294.XSHE.csv | 差异行: 2492\n",
      "更新: sse.600062.csv → 600062.XSHG.csv | 差异行: 2588\n",
      "更新: szse.002589.csv → 002589.XSHE.csv | 差异行: 2543\n",
      "更新: sse.603128.csv → 603128.XSHG.csv | 差异行: 2508\n",
      "更新: szse.301303.csv → 301303.XSHE.csv | 差异行: 427\n",
      "更新: sse.603007.csv → 603007.XSHG.csv | 差异行: 2003\n",
      "更新: sse.603009.csv → 603009.XSHG.csv | 差异行: 1\n",
      "更新: szse.002625.csv → 002625.XSHE.csv | 差异行: 2314\n",
      "更新: sse.603897.csv → 603897.XSHG.csv | 差异行: 1568\n",
      "更新: szse.000682.csv → 000682.XSHE.csv | 差异行: 2450\n",
      "更新: sse.600009.csv → 600009.XSHG.csv | 差异行: 2590\n",
      "更新: sse.603668.csv → 603668.XSHG.csv | 差异行: 1884\n",
      "更新: sse.600132.csv → 600132.XSHG.csv | 差异行: 2668\n",
      "更新: sse.603367.csv → 603367.XSHG.csv | 差异行: 1732\n",
      "更新: szse.002352.csv → 002352.XSHE.csv | 差异行: 2589\n",
      "更新: sse.600508.csv → 600508.XSHG.csv | 差异行: 2610\n",
      "更新: sse.688317.csv → 688317.XSHG.csv | 差异行: 906\n",
      "更新: sse.603083.csv → 603083.XSHG.csv | 差异行: 1672\n",
      "更新: szse.300288.csv → 300288.XSHE.csv | 差异行: 2468\n",
      "更新: sse.601066.csv → 601066.XSHG.csv | 差异行: 1585\n",
      "更新: sse.600018.csv → 600018.XSHG.csv | 差异行: 2624\n",
      "更新: szse.002653.csv → 002653.XSHE.csv | 差异行: 2601\n",
      "更新: sse.600191.csv → 600191.XSHG.csv | 差异行: 1\n",
      "更新: szse.301381.csv → 301381.XSHE.csv | 差异行: 293\n",
      "更新: sse.600873.csv → 600873.XSHG.csv | 差异行: 2472\n",
      "更新: szse.301525.csv → 301525.XSHE.csv | 差异行: 284\n",
      "更新: sse.603558.csv → 603558.XSHG.csv | 差异行: 2231\n",
      "更新: sse.688161.csv → 688161.XSHG.csv | 差异行: 838\n",
      "更新: sse.600016.csv → 600016.XSHG.csv | 差异行: 2641\n",
      "更新: sse.688257.csv → 688257.XSHG.csv | 差异行: 714\n",
      "更新: szse.300187.csv → 300187.XSHE.csv | 差异行: 2394\n",
      "更新: szse.002601.csv → 002601.XSHE.csv | 差异行: 2571\n",
      "更新: sse.603998.csv → 603998.XSHG.csv | 差异行: 2322\n",
      "更新: sse.600315.csv → 600315.XSHG.csv | 差异行: 2565\n",
      "更新: szse.300398.csv → 300398.XSHE.csv | 差异行: 2393\n",
      "更新: sse.600309.csv → 600309.XSHG.csv | 差异行: 2466\n",
      "更新: sse.688076.csv → 688076.XSHG.csv | 差异行: 806\n",
      "更新: sse.600894.csv → 600894.XSHG.csv | 差异行: 2608\n",
      "更新: szse.000554.csv → 000554.XSHE.csv | 差异行: 2610\n",
      "更新: szse.301171.csv → 301171.XSHE.csv | 差异行: 545\n",
      "更新: szse.002584.csv → 002584.XSHE.csv | 差异行: 2444\n",
      "更新: sse.600312.csv → 600312.XSHG.csv | 差异行: 2541\n",
      "更新: sse.601318.csv → 601318.XSHG.csv | 差异行: 2622\n",
      "更新: sse.603126.csv → 603126.XSHG.csv | 差异行: 1\n",
      "更新: szse.300973.csv → 300973.XSHE.csv | 差异行: 880\n",
      "更新: sse.688151.csv → 688151.XSHG.csv | 差异行: 701\n",
      "更新: sse.688531.csv → 688531.XSHG.csv | 差异行: 361\n",
      "更新: sse.601231.csv → 601231.XSHG.csv | 差异行: 1\n",
      "更新: sse.688093.csv → 688093.XSHG.csv | 差异行: 1027\n",
      "更新: sse.603885.csv → 603885.XSHG.csv | 差异行: 2260\n",
      "更新: sse.601519.csv → 601519.XSHG.csv | 差异行: 1\n",
      "更新: sse.601006.csv → 601006.XSHG.csv | 差异行: 2627\n",
      "更新: szse.300897.csv → 300897.XSHE.csv | 差异行: 990\n",
      "更新: sse.600917.csv → 600917.XSHG.csv | 差异行: 2440\n",
      "更新: szse.000591.csv → 000591.XSHE.csv | 差异行: 2571\n",
      "更新: szse.002345.csv → 002345.XSHE.csv | 差异行: 2417\n",
      "更新: sse.600039.csv → 600039.XSHG.csv | 差异行: 2601\n",
      "更新: szse.000878.csv → 000878.XSHE.csv | 差异行: 2470\n",
      "更新: sse.601398.csv → 601398.XSHG.csv | 差异行: 2676\n",
      "更新: sse.603299.csv → 603299.XSHG.csv | 差异行: 1\n",
      "更新: sse.688623.csv → 688623.XSHG.csv | 差异行: 322\n",
      "更新: sse.603197.csv → 603197.XSHG.csv | 差异行: 1787\n",
      "更新: sse.605098.csv → 605098.XSHG.csv | 差异行: 858\n",
      "更新: szse.002111.csv → 002111.XSHE.csv | 差异行: 2529\n",
      "更新: szse.300481.csv → 300481.XSHE.csv | 差异行: 2289\n",
      "更新: sse.603444.csv → 603444.XSHG.csv | 差异行: 1915\n",
      "更新: sse.605376.csv → 605376.XSHG.csv | 差异行: 943\n",
      "更新: szse.002748.csv → 002748.XSHE.csv | 差异行: 2316\n",
      "更新: szse.301428.csv → 301428.XSHE.csv | 差异行: 375\n",
      "更新: sse.603757.csv → 603757.XSHG.csv | 差异行: 1766\n",
      "更新: sse.603408.csv → 603408.XSHG.csv | 差异行: 1052\n",
      "更新: szse.002831.csv → 002831.XSHE.csv | 差异行: 1896\n",
      "更新: szse.002267.csv → 002267.XSHE.csv | 差异行: 2658\n",
      "更新: sse.688097.csv → 688097.XSHG.csv | 差异行: 835\n",
      "更新: sse.688247.csv → 688247.XSHG.csv | 差异行: 522\n",
      "更新: sse.605118.csv → 605118.XSHG.csv | 差异行: 1009\n",
      "更新: szse.001368.csv → 001368.XSHE.csv | 差异行: 414\n",
      "更新: szse.002966.csv → 002966.XSHE.csv | 差异行: 1282\n",
      "更新: sse.601598.csv → 601598.XSHG.csv | 差异行: 1388\n",
      "更新: sse.603103.csv → 603103.XSHG.csv | 差异行: 1708\n",
      "更新: sse.603817.csv → 603817.XSHG.csv | 差异行: 1861\n",
      "更新: szse.002471.csv → 002471.XSHE.csv | 差异行: 2490\n",
      "更新: szse.000828.csv → 000828.XSHE.csv | 差异行: 2569\n",
      "更新: szse.002797.csv → 002797.XSHE.csv | 差异行: 2014\n",
      "更新: szse.301300.csv → 301300.XSHE.csv | 差异行: 546\n",
      "更新: szse.300192.csv → 300192.XSHE.csv | 差异行: 2309\n",
      "更新: szse.000623.csv → 000623.XSHE.csv | 差异行: 2637\n",
      "更新: sse.600992.csv → 600992.XSHG.csv | 差异行: 2645\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "更新: szse.300701.csv → 300701.XSHE.csv | 差异行: 1704\n",
      "更新: szse.000753.csv → 000753.XSHE.csv | 差异行: 2629\n",
      "更新: sse.688580.csv → 688580.XSHG.csv | 差异行: 1\n",
      "更新: szse.002057.csv → 002057.XSHE.csv | 差异行: 2427\n",
      "更新: szse.000501.csv → 000501.XSHE.csv | 差异行: 2598\n",
      "更新: szse.002093.csv → 002093.XSHE.csv | 差异行: 2566\n",
      "更新: szse.002907.csv → 002907.XSHE.csv | 差异行: 1672\n",
      "更新: szse.300244.csv → 300244.XSHE.csv | 差异行: 2517\n",
      "更新: szse.002315.csv → 002315.XSHE.csv | 差异行: 2612\n",
      "更新: szse.002236.csv → 002236.XSHE.csv | 差异行: 2603\n",
      "更新: szse.002083.csv → 002083.XSHE.csv | 差异行: 2605\n",
      "更新: szse.000156.csv → 000156.XSHE.csv | 差异行: 2427\n",
      "更新: sse.600371.csv → 600371.XSHG.csv | 差异行: 1\n",
      "更新: szse.002984.csv → 002984.XSHE.csv | 差异行: 991\n",
      "更新: sse.688355.csv → 688355.XSHG.csv | 差异行: 824\n",
      "更新: szse.000951.csv → 000951.XSHE.csv | 差异行: 2630\n",
      "更新: sse.600837.csv → 600837.XSHG.csv | 差异行: 2604\n",
      "更新: szse.002863.csv → 002863.XSHE.csv | 差异行: 1812\n",
      "更新: szse.300760.csv → 300760.XSHE.csv | 差异行: 1471\n",
      "更新: szse.000807.csv → 000807.XSHE.csv | 差异行: 2509\n",
      "更新: sse.600820.csv → 600820.XSHG.csv | 差异行: 2658\n",
      "更新: szse.300580.csv → 300580.XSHE.csv | 差异行: 1765\n",
      "更新: sse.603233.csv → 603233.XSHG.csv | 差异行: 1754\n",
      "更新: sse.600028.csv → 600028.XSHG.csv | 差异行: 2605\n",
      "更新: szse.300307.csv → 300307.XSHE.csv | 差异行: 2597\n",
      "更新: sse.603928.csv → 603928.XSHG.csv | 差异行: 1888\n",
      "更新: szse.300320.csv → 300320.XSHE.csv | 差异行: 2528\n",
      "更新: sse.600439.csv → 600439.XSHG.csv | 差异行: 1\n",
      "更新: sse.603655.csv → 603655.XSHG.csv | 差异行: 1649\n",
      "更新: sse.600116.csv → 600116.XSHG.csv | 差异行: 2659\n",
      "更新: szse.001326.csv → 001326.XSHE.csv | 差异行: 220\n",
      "更新: szse.002034.csv → 002034.XSHE.csv | 差异行: 2484\n",
      "更新: szse.001379.csv → 001379.XSHE.csv | 差异行: 188\n",
      "更新: sse.688088.csv → 688088.XSHG.csv | 差异行: 1258\n",
      "更新: szse.002676.csv → 002676.XSHE.csv | 差异行: 2384\n",
      "更新: sse.600022.csv → 600022.XSHG.csv | 差异行: 1\n",
      "更新: sse.600032.csv → 600032.XSHG.csv | 差异行: 810\n",
      "更新: sse.603520.csv → 603520.XSHG.csv | 差异行: 1944\n",
      "更新: szse.000812.csv → 000812.XSHE.csv | 差异行: 2\n",
      "更新: sse.603883.csv → 603883.XSHG.csv | 差异行: 2207\n",
      "更新: szse.300272.csv → 300272.XSHE.csv | 差异行: 2510\n",
      "更新: szse.002560.csv → 002560.XSHE.csv | 差异行: 2494\n",
      "更新: szse.000498.csv → 000498.XSHE.csv | 差异行: 2564\n",
      "更新: szse.300748.csv → 300748.XSHE.csv | 差异行: 1459\n",
      "更新: sse.600764.csv → 600764.XSHG.csv | 差异行: 2310\n",
      "更新: sse.688606.csv → 688606.XSHG.csv | 差异行: 868\n",
      "更新: szse.001376.csv → 001376.XSHE.csv | 差异行: 215\n",
      "更新: szse.000048.csv → 000048.XSHE.csv | 差异行: 2433\n",
      "更新: sse.600758.csv → 600758.XSHG.csv | 差异行: 2536\n",
      "更新: szse.001210.csv → 001210.XSHE.csv | 差异行: 757\n",
      "更新: sse.600033.csv → 600033.XSHG.csv | 差异行: 2668\n",
      "更新: sse.603387.csv → 603387.XSHG.csv | 差异行: 1745\n",
      "更新: sse.603579.csv → 603579.XSHG.csv | 差异行: 1882\n",
      "更新: sse.603040.csv → 603040.XSHG.csv | 差异行: 1868\n",
      "更新: szse.301020.csv → 301020.XSHE.csv | 差异行: 785\n",
      "更新: sse.688590.csv → 688590.XSHG.csv | 差异行: 977\n",
      "更新: sse.603535.csv → 603535.XSHG.csv | 差异行: 1716\n",
      "更新: sse.603863.csv → 603863.XSHG.csv | 差异行: 1\n",
      "更新: sse.600198.csv → 600198.XSHG.csv | 差异行: 1\n",
      "更新: sse.601995.csv → 601995.XSHG.csv | 差异行: 1010\n",
      "更新: szse.002385.csv → 002385.XSHE.csv | 差异行: 2628\n",
      "更新: sse.688516.csv → 688516.XSHG.csv | 差异行: 1066\n",
      "更新: szse.000582.csv → 000582.XSHE.csv | 差异行: 2474\n",
      "更新: szse.002991.csv → 002991.XSHE.csv | 差异行: 1002\n",
      "更新: szse.002149.csv → 002149.XSHE.csv | 差异行: 2584\n",
      "更新: sse.603650.csv → 603650.XSHG.csv | 差异行: 1528\n",
      "更新: sse.688686.csv → 688686.XSHG.csv | 差异行: 913\n",
      "更新: szse.000936.csv → 000936.XSHE.csv | 差异行: 2564\n",
      "更新: sse.600436.csv → 600436.XSHG.csv | 差异行: 2619\n",
      "更新: sse.688719.csv → 688719.XSHG.csv | 差异行: 258\n",
      "更新: sse.603619.csv → 603619.XSHG.csv | 差异行: 1670\n",
      "更新: szse.300261.csv → 300261.XSHE.csv | 差异行: 2541\n",
      "更新: sse.600367.csv → 600367.XSHG.csv | 差异行: 2610\n",
      "更新: sse.601010.csv → 601010.XSHG.csv | 差异行: 2589\n",
      "更新: sse.601098.csv → 601098.XSHG.csv | 差异行: 2621\n",
      "更新: sse.688720.csv → 688720.XSHG.csv | 差异行: 195\n",
      "更新: szse.002372.csv → 002372.XSHE.csv | 差异行: 2612\n",
      "更新: sse.600072.csv → 600072.XSHG.csv | 差异行: 2481\n",
      "更新: sse.603567.csv → 603567.XSHG.csv | 差异行: 1\n",
      "更新: sse.688069.csv → 688069.XSHG.csv | 差异行: 1006\n",
      "更新: szse.000155.csv → 000155.XSHE.csv | 差异行: 2147\n",
      "更新: szse.002683.csv → 002683.XSHE.csv | 差异行: 2440\n",
      "更新: szse.000506.csv → 000506.XSHE.csv | 差异行: 37\n",
      "更新: sse.688285.csv → 688285.XSHG.csv | 差异行: 708\n",
      "更新: szse.002090.csv → 002090.XSHE.csv | 差异行: 2542\n",
      "更新: szse.301119.csv → 301119.XSHE.csv | 差异行: 752\n",
      "更新: szse.000423.csv → 000423.XSHE.csv | 差异行: 2602\n",
      "更新: sse.600714.csv → 600714.XSHG.csv | 差异行: 2457\n",
      "更新: sse.603095.csv → 603095.XSHG.csv | 差异行: 1082\n",
      "更新: sse.600509.csv → 600509.XSHG.csv | 差异行: 1\n",
      "更新: szse.300007.csv → 300007.XSHE.csv | 差异行: 2538\n",
      "更新: szse.000408.csv → 000408.XSHE.csv | 差异行: 2413\n",
      "更新: szse.002595.csv → 002595.XSHE.csv | 差异行: 2625\n",
      "更新: sse.688693.csv → 688693.XSHG.csv | 差异行: 303\n",
      "更新: szse.301039.csv → 301039.XSHE.csv | 差异行: 806\n",
      "更新: szse.000788.csv → 000788.XSHE.csv | 差异行: 2538\n",
      "更新: szse.000514.csv → 000514.XSHE.csv | 差异行: 2504\n",
      "更新: sse.600222.csv → 600222.XSHG.csv | 差异行: 2580\n",
      "更新: szse.300304.csv → 300304.XSHE.csv | 差异行: 2613\n",
      "更新: szse.300774.csv → 300774.XSHE.csv | 差异行: 759\n",
      "更新: szse.300346.csv → 300346.XSHE.csv | 差异行: 2550\n",
      "更新: sse.605090.csv → 605090.XSHG.csv | 差异行: 791\n",
      "更新: sse.601211.csv → 601211.XSHG.csv | 差异行: 2246\n",
      "更新: szse.300517.csv → 300517.XSHE.csv | 差异行: 1996\n",
      "更新: sse.603939.csv → 603939.XSHG.csv | 差异行: 2228\n",
      "更新: szse.300534.csv → 300534.XSHE.csv | 差异行: 1937\n",
      "更新: sse.688585.csv → 688585.XSHG.csv | 差异行: 983\n",
      "更新: sse.603077.csv → 603077.XSHG.csv | 差异行: 2585\n",
      "更新: szse.301209.csv → 301209.XSHE.csv | 差异行: 515\n",
      "更新: sse.601901.csv → 601901.XSHG.csv | 差异行: 2591\n",
      "更新: sse.603279.csv → 603279.XSHG.csv | 差异行: 1299\n",
      "更新: sse.605255.csv → 605255.XSHG.csv | 差异行: 1034\n",
      "更新: sse.603270.csv → 603270.XSHG.csv | 差异行: 272\n",
      "更新: szse.301377.csv → 301377.XSHE.csv | 差异行: 446\n",
      "更新: szse.002543.csv → 002543.XSHE.csv | 差异行: 2585\n",
      "更新: sse.601375.csv → 601375.XSHG.csv | 差异行: 1895\n",
      "更新: sse.688228.csv → 688228.XSHG.csv | 差异行: 1\n",
      "更新: szse.001207.csv → 001207.XSHE.csv | 差异行: 821\n",
      "更新: sse.600256.csv → 600256.XSHG.csv | 差异行: 1\n",
      "更新: szse.300677.csv → 300677.XSHE.csv | 差异行: 1766\n",
      "更新: szse.300284.csv → 300284.XSHE.csv | 差异行: 2457\n",
      "更新: sse.601600.csv → 601600.XSHG.csv | 差异行: 2564\n",
      "更新: szse.002925.csv → 002925.XSHE.csv | 差异行: 1640\n",
      "\n",
      "处理完成: 5099 个文件\n",
      "发现差异的文件: 962 个\n",
      "更新文件: 962 个\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import os\n",
    "\n",
    "def compare_and_update_stock_data(at_folder, miq_folder, mapping):\n",
    "    \"\"\"\n",
    "    比较并更新匹配的股票文件\n",
    "    \n",
    "    参数:\n",
    "    at_folder (str): AT数据文件夹路径\n",
    "    miq_folder (str): 米筐数据文件夹路径\n",
    "    mapping (dict): 文件匹配字典 {at文件名: miq文件名}\n",
    "    \n",
    "    返回:\n",
    "    dict: 差异统计字典 {at文件名: (差异行数, [差异日期])}\n",
    "    \"\"\"\n",
    "    diff_stats = {}\n",
    "    updated_files = 0\n",
    "    diff_files = 0\n",
    "    \n",
    "    for at_file, miq_file in mapping.items():\n",
    "        try:\n",
    "            # 读取文件\n",
    "            at_path = os.path.join(at_folder, at_file)\n",
    "            miq_path = os.path.join(miq_folder, miq_file)\n",
    "            df_at = pd.read_csv(at_path)\n",
    "            df_miq = pd.read_csv(miq_path)\n",
    "            \n",
    "            # 处理日期列\n",
    "            df_at['date'] = pd.to_datetime(df_at['date'])\n",
    "            df_miq['date'] = pd.to_datetime(df_miq['date'])\n",
    "            \n",
    "            # 获取共同日期\n",
    "            common_dates = set(df_at['date']) & set(df_miq['date'])\n",
    "            df_at_common = df_at[df_at['date'].isin(common_dates)].sort_values('date')\n",
    "            df_miq_common = df_miq[df_miq['date'].isin(common_dates)].sort_values('date')\n",
    "            \n",
    "            # 比较关键列\n",
    "            diff_dates = []\n",
    "            columns = ['open', 'high', 'low', 'close']\n",
    "            \n",
    "            for date in common_dates:\n",
    "                row_at = df_at_common[df_at_common['date'] == date].iloc[0]\n",
    "                row_miq = df_miq_common[df_miq_common['date'] == date].iloc[0]\n",
    "                \n",
    "                # 检查差异\n",
    "                diff_found = False\n",
    "                for col in columns:\n",
    "                    if not np.isclose(row_at[col], row_miq[col], rtol=1e-5, atol=1e-5):\n",
    "                        diff_found = True\n",
    "                        break\n",
    "                \n",
    "                if diff_found:\n",
    "                    diff_dates.append(date.strftime('%Y-%m-%d'))\n",
    "            \n",
    "            # 记录差异\n",
    "            diff_count = len(diff_dates)\n",
    "            if diff_count > 0:\n",
    "                diff_files += 1\n",
    "                # 保存差异报告\n",
    "                report_path = f\"{os.path.splitext(at_file)[0]}_diff_report.txt\"\n",
    "                with open(report_path, 'w') as f:\n",
    "                    f.write(f\"AT文件: {at_file}\\n米筐文件: {miq_file}\\n\")\n",
    "                    f.write(f\"差异行数: {diff_count}\\n差异日期:\\n\")\n",
    "                    f.write(\"\\n\".join(diff_dates))\n",
    "                \n",
    "                # 更新AT数据\n",
    "                for col in columns:\n",
    "                    df_at.loc[df_at['date'].isin(common_dates), col] = df_miq_common[col].values\n",
    "                df_at.to_csv(at_path, index=False)\n",
    "                updated_files += 1\n",
    "                print(f\"更新: {at_file} → {miq_file} | 差异行: {diff_count}\")\n",
    "            \n",
    "            # 保存统计\n",
    "            diff_stats[at_file] = (diff_count, diff_dates)\n",
    "            \n",
    "        except Exception as e:\n",
    "            print(f\"处理 {at_file} 时出错: {str(e)}\")\n",
    "            diff_stats[at_file] = (-1, [])\n",
    "    \n",
    "    # 输出总结报告\n",
    "    print(f\"\\n处理完成: {len(mapping)} 个文件\")\n",
    "    print(f\"发现差异的文件: {diff_files} 个\")\n",
    "    print(f\"更新文件: {updated_files} 个\")\n",
    "    \n",
    "    # 保存全局差异统计\n",
    "    with open('diff_summary.txt', 'w') as f:\n",
    "        f.write(\"全局差异统计:\\n\")\n",
    "        for at_file, (count, dates) in diff_stats.items():\n",
    "            if count > 0:\n",
    "                f.write(f\"{at_file}: {count} 行差异\\n\")\n",
    "    \n",
    "    return diff_stats\n",
    "\n",
    "# 使用示例\n",
    "if __name__ == \"__main__\":\n",
    "    at_folder = r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\AT的A股日线'\n",
    "    miq_folder = r'C:\\Users\\86134\\Desktop\\练习\\股市分析\\A股日线数据\\米筐的A股日线' \n",
    "    \n",
    "    # 先获取文件匹配关系\n",
    "    mapping, _, _ = match_stock_files(at_folder, miq_folder)\n",
    "    \n",
    "    # 进行比较和更新\n",
    "    diff_stats = compare_and_update_stock_data(at_folder, miq_folder, mapping)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7cb839b3",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
